//
//  Objcect+PrintIvar.swift
//  表情键盘
//
//  Created by Apple on 16/7/30.
//  Copyright © 2016年 Apple. All rights reserved.
//

import Foundation

extension NSObject {
    
    /**
     打印对象的Ivar
     */
    class func printIvar() {
        // 使用运行时来获取类的成员变量,OC需要引入 <objc/runtime.h>
        // cls: AnyClass!: 获取哪个类的成员变量
        // outCount: UnsafeMutablePointer<UInt32>: 获取到成员变量的个数
        // UnsafeMutablePointer<Ivar>: 返回值,其实返回的是一个数组,数组里面存放的是Ivar的元素
        // C语言的数组不是面向对象
        var count: UInt32 = 0
        let ivars = class_copyIvarList(self, &count)
        
        // 遍历数组
        for var i = 0; i < Int(count); i++ {
            // 取出每个元素
            let ivar = ivars[i]
            
            // C语言获取数组或结构体,一般都是提供一些方法
            let cName = ivar_getName(ivar)
            // UnsafePointer<Int8> == UnsafePointer<CChar>
            let name = String(CString: cName, encoding: NSUTF8StringEncoding)
            
            let cType = ivar_getTypeEncoding(ivar)
            let type = String(CString: cType, encoding: NSUTF8StringEncoding)
            
            print("name: \(name), type: \(type)")
        }
    }
}